perm filename EXAM.SAI[PIC,HE] blob
sn#430337 filedate 1979-04-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ENTRY EXAM
C00008 ENDMK
C⊗;
ENTRY EXAM;
BEGIN "EXAM"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
IFC STANFORD THENC REQUIRE "TENEXIO.SAI" SOURCE!FILE; ENDC
SIMPLE INTERNAL PROCEDURE EXAM(INTEGER CURBUF);
BEGIN "EXAM"
STRING PICNAM,WHAT,ANOTHER,SSTR,DIR,CHOICE;
INTEGER CHANIN,FLG,BUF,ROWNUM,COLUMNS,BYTSIZE,ROWSTR,COLMST,NOROW,NOCOLM,PTR,I,J,SI,SJI,ROWEND,COLEND;
INTEGER B1,BRCHAR,TIME,SZ,sf1,sf2;
REAL NUMB;
time←0;
getformat(sf1,sf2);
b1←getbreak;
clrbrk(b1);
SETBREAK(B1,"RLUD","RLUD","NI");
rowstr←colmst←1; norow←nocolm←15;
WHILE TRUE DO BEGIN "LOOP"
BUF←CURBUF;
BYTSIZE←SZ←BYTSZ(BUF);
SZ←1+(IF SZ>9 THEN 4 ELSE 3);
SETFORMAT(SZ,0);
ROWNUM←ROWS(BUF);
COLUMNS←COLMS(BUF);
WHILE TRUE DO BEGIN "MORE"
iprmpt("STARTING ROW",rowstr);
iprmpt("NO. OF ROWS",norow);
iprmpt("STARTING COLUMN",colmst);
iprmpt("NO. OF COLUMNS",nocolm);
WHILE TRUE DO BEGIN "CHECK"
ROWSTR←(ROWSTR MAX 1) MIN ROWNUM;
COLMST←(COLMST MAX 1) MIN COLUMNS;
IF ROWSTR+NOROW-1>ROWNUM THEN NOROW←ROWNUM-ROWSTR+1;
IF COLMST+NOCOLM-1>COLUMNS THEN NOCOLM←COLUMNS-COLMST+1;
ROWEND←ROWSTR+NOROW-1;
COLEND←COLMST+NOCOLM-1;
PRINT("CORNER (I,J)= (",ROWSTR,",",COLMST,") ",NOROW," X ",NOCOLM,CRLF);
PRINT(SDUM←" "[1 TO SZ+1]);
FOR J←COLMST THRU COLEND DO PRINT(J);
PRINT(CRLF);
PRINT(SDUM);
SDUM←"--------------"[1 TO SZ];
FOR J←COLMST THRU COLEND DO PRINT(SDUM);
PRINT(CRLF);
FOR I←ROWSTR THRU ROWEND DO BEGIN
PTR←INPTR(I,COLMST,BUF);
PRINT(I,"!");
FOR J←COLMST THRU COLEND DO PRINT(ILDB(PTR));
PRINT(CRLF);
END;
WHILE TRUE DO BEGIN "CHOICE"
PRINT("CHOICE: "); CHOICE←INTTY;
IF CHOICE="S" THEN DONE "CHECK"
ELSE IF CHOICE=NULL THEN DONE "LOOP"
ELSE IF CHOICE="?" THEN PRINT("Info,Pic,Go,Window,Subw,Xdelete",CRLF)
ELSE IF CHOICE="I" THEN BEGIN "INFORM"
PRINT("ROWS=",ROWNUM," COLUMNS=",COLUMNS," BYTESIZE=",BYTSIZE,CRLF);
PRINT("ISTART=",ISUBST(BUF)," JSTART=",JSUBST(BUF),CRLF);
END "INFORM"
ELSE IF CHOICE="P" THEN BEGIN "NEWPIC"
IF TIME THEN FREBUF(BUF) ELSE TIME←1;
PRINT("INPUT A PICTURE: ");
PICNAM←INTTY;
INDMP(NULL,PICNAM,BUF←FNDBUF,FLG);
ROWNUM←ROWS(BUF);
COLUMNS←COLMS(BUF);
SZ←BYTSIZE←BYTSZ(BUF);
SZ←1+(IF SZ>9 THEN 4 ELSE 3);
SETFORMAT(SZ,0);
END "NEWPIC"
ELSE IF CHOICE="G" THEN DONE
ELSE IF CHOICE="W" THEN WHILE TRUE DO BEGIN "WINDOW"
PRINT("DIRECTION: "); DIR←INTTY;
IF DIR="G" OR DIR=NULL THEN DONE "CHOICE"
ELSE IF DIR="C" THEN BEGIN
iprmpt("NO OF ROWS",NOROW);
iprmpt("NO. OF COLUMNS",NOCOLM);
END;
NUMB←REALSCAN(SSTR←SCAN(DIR,B1,BRCHAR),FLG);
IF NUMB=0.0 THEN NUMB←1.0;
IF BRCHAR="U" THEN BEGIN "UP"
ROWSTR←ROWSTR-NUMB*NOROW+1;
END "UP"
ELSE IF BRCHAR="D" THEN BEGIN "DOWN"
ROWSTR←ROWSTR+NUMB*NOROW-1;
END "DOWN"
ELSE IF BRCHAR="L" THEN BEGIN "LEFT"
COLMST←COLMST-NOCOLM*NUMB+1;
END "LEFT"
ELSE IF BRCHAR="R" THEN BEGIN "RIGHT"
COLMST←COLMST+NOCOLM*NUMB-1;
END "RIGHT";
END "WINDOW"
else IF CHOICE="X" THEN BEGIN "DELETE"
FOR I←ROWSTR THRU (ROWSTR+NOROW-1) DO BEGIN
PTR←OUTPTR(I,COLMST,BUF);
FOR J←COLMST THRU (COLMST+NOCOLM-1) DO IDPB(0,PTR);
END;
END "DELETE";
END "CHOICE";
END "CHECK";
END "MORE";
END "LOOP";
IF TIME THEN FREBUF(BUF);
relbreak(B1);
SETFORMAT(sf1,sf2);
END "EXAM";
END;